{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Homework 3\n",
    "\n",
    "**Due: 03/05/2020**\n",
    "\n",
    "## References\n",
    "\n",
    "+ Chapter 1, 2 from the [Bishop textbook](http://users.isr.ist.utl.pt/~wurmd/Livros/school/Bishop%20-%20Pattern%20Recognition%20And%20Machine%20Learning%20-%20Springer%20%202006.pdf).\n",
    "+ Lectures 12, 13 (inclusive).\n",
    "\n",
    "\n",
    "\n",
    "## Instructions\n",
    "\n",
    "+ Type your name and email in the \"Student details\" section below.\n",
    "+ Develop the code and generate the figures you need to solve the problems using this notebook.\n",
    "+ For the answers that require a mathematical proof or derivation you can either:\n",
    "    \n",
    "    - Type the answer using the built-in latex capabilities. In this case, simply export the notebook as a pdf and upload it on gradescope; or\n",
    "    - You can print the notebook (after you are done with all the code), write your answers by hand, scan, turn your response to a single pdf, and upload on gradescope.\n",
    "\n",
    "\n",
    "## Student details\n",
    "\n",
    "+ **First Name:**\n",
    "+ **Last Name:**\n",
    "+ **Email:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import seaborn as sns\n",
    "sns.set_context('paper')\n",
    "sns.set_style('white')\n",
    "sns.set()\n",
    "import scipy.stats as st\n",
    "from sklearn.datasets import make_spd_matrix"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Problem 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Suppose you conduct some experiments and collect a dataset of $N$ pairs of input and target variables, $\\mathcal{D} = (x_{1:N}, y_{1:N})$, where $x_i \\in \\mathbb{R}$ and $y_i \\in \\mathbb{R}$, $\\forall i$. \n",
    "Assume a Gaussian likelihood with the mean being a generalized linear model with weights $\\mathbf{w}\\in\\mathbb{R}^m$ and basis functions $\\boldsymbol{\\phi}(x)\\in\\mathbb{R}^M$, and the noise variance being a constant $\\sigma^2$.\n",
    "On the weights, use an isotropic Gaussian prior, with precision parameter, $\\alpha$.\n",
    "\n",
    "1. Derive expressions for $\\mathbf{m}_{N}$ and $\\mathbf{S}_{N}$, the posterior mean and covariance of the model parameters respectively. Ask the question: What do I know about the weights given all the data I have seen? You will need Bayes rule for updating the weights and little bit of algebra. In particular, you will need a trick called \"completing the square.\"\n",
    "\n",
    "2. Use the results from part 1 to derive the posterior predictive distribution at an arbitrary test input $x^{*}$. Ask the question: What do I know about the $y^*$ at $x^*$ given all the data I have seen? You will need the sum rule of probability theory to connect this question to the likehood and the posterior you obtained in step 1.\n",
    "\n",
    "3. Suppose now you perform an additional experiment and receive a data-point, $\\mathcal{D}_{N+1}=(x_{N+1}, y_{N+1})$. Using the current posterior distribution over the parameters as the new prior, show that updating the model with the $(N+1)^{th}$ data-point results in the same posterior distribution shown above, with $N$ replaced by $N+1$.\n",
    "\n",
    "The required expressions for all  of the above cases are well-known in closed form. It is, however, useful to work through the algebra atleast once. Feel free to consult Bishop's book, but in the end present your own derivation from scratch."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*Enter your model description/solution here. Delete that ``<br>`` line (it just makes some white space).*\n",
    "<br><br><br><br><br><br><br><br><br><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Problem 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[Conjugate priors](https://en.wikipedia.org/wiki/Conjugate_prior) are an extremely useful tool in Bayesian inference.\n",
    "If the posterior distribution over the unknown parameters, $\\boldsymbol{\\theta}$, of a statistical model is in the same family  of distributions as the prior, the prior  is said to be conjugate to the chosen likelihood. We saw one such example in class where a Gaussian prior over the unknown weights of the linear regression model lead to a Gaussian posterior under the Gaussian likelihood model. We used a fixed value of $\\sigma^2$ in our analysis of the linear regression model in class.\n",
    "\n",
    "As before, consider a Gaussian likelihood with the mean being a generalized linear model with weights $\\mathbf{w}\\in\\mathbb{R}^m$ and basis functions $\\boldsymbol{\\phi}(x)\\in\\mathbb{R}^M$, and the noise variance being a constant $\\sigma^2$\n",
    "Let's treat the noise parameter also as an unknown. Let $\\beta$ be the inverse noise variance, i.e., $\\beta = \\frac{1}{\\sigma^2}$ $^{(1)}$. \n",
    "Show that the following prior over $w$ and $\\beta$:\n",
    "$$\n",
    "p(\\mathbf{w}, \\beta) = \\mathcal{N}(\\mathbf{w}|0, (\\alpha \\beta)^{-1}\\mathbf{I}) \\mathrm{Gamma}(\\beta| a_0, b_0),\n",
    "$$\n",
    "is conjugate.\n",
    "That is, show that the posterior over $\\mathbf{w}$ and $\\beta$ has the same form as the prior: \n",
    "$$p(\\mathbf{w}, \\beta|\\mathcal{D}_N, \\alpha) = \\mathcal{N}(w|\\beta, \\mathbf{m}_N, \\mathbf{S}_N) \\mathrm{Gamma}(\\beta| a_N, b_N).$$\n",
    "In doing so, recover the expressions for $\\mathbf{m}_N$, $\\mathbf{S}_N$, $a_N$ and $b_N$. Discuss any interesting observation you make about the form of the posterior distribution parameters.\n",
    "\n",
    "The [Gamma distribution](https://en.wikipedia.org/wiki/Gamma_distribution) has probability density:\n",
    "$$\n",
    "\\mathrm{Gamma}(\\beta|a_0, b_0) = \\frac{b_0^{a_0}}{\\Gamma(a)}\\beta^{a_0-1}e^{-b_0\\beta}\n",
    "$$\n",
    "\n",
    "(1) - _You will frequently encounter in literature the use of the precision rather than the variance when using the normal distribution. Doing so often simplifies computation_."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*Enter your model description/solution here. Delete that ``<br>`` line (it just makes some white space).*\n",
    "<br><br><br><br><br><br><br><br><br><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Problem 3 - Some exercises on the multivariate normal "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The Bayesian linear regression model discussed in class makes extensive usage of the multivariate Gaussian distribution. ```numpy``` and ```scipy``` offer nice implementations of the multivariate normal distribution for computing densities and generating samples. However, it is useful to go through the process of developing your method for doing these things atleast once. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Consider the random variable $\\mathbf{X} \\sim \\mathcal{N}(\\mathbf{X}|\\mu, \\Sigma)$, where, $\\mathbf{X} \\in \\mathbb{R}^d$ and $\\mu$ and $\\Sigma$ are its mean vector and covariance matrix respectively. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Density of a multivariate Gaussian"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The expression for  the density of the multivariate Gaussian distribution can be found [here](https://en.wikipedia.org/wiki/Multivariate_normal_distribution). \n",
    "\n",
    "Note that evaluating the density function of MVN (multivariate normal) requires evaluating the inverse of the covariance matrix, $\\Sigma$. Inverting a matrix is inefficient and numerically unstable and should be avoided as much as possible. \n",
    "\n",
    "Instead you can compute the density of the random variable $\\mathbf{X}$ at an arbitrary point $\\mathbf{x}$ as follows:\n",
    "\n",
    "1. Use [```scipy.linalg.cho_factor```](https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.linalg.cho_factor.html#scipy.linalg.cho_factor) to perform  the Cholesky decomposition of $\\Sigma$ i.e. find $\\mathbf{L}$ such that $\\Sigma = \\mathbf{L} \\mathbf{L}^T$.\n",
    "2. Solve, for $\\mathbf{z}$, the system of linear equations $\\mathbf{L} \\mathbf{L}^T \\mathbf{z} = \\mathbf{x} -\\mu$. You can use [```scipy.linalg.cho_solve```](https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.linalg.cho_solve.html).\n",
    "3. Put everything together to compute $p(\\mathbf{x}) = \\frac{1}{\\sqrt{(2\\pi)^d | \\Sigma|}}\\exp\\Big[ -\\frac{1}{2}(\\mathbf{x}-\\mu)^T \\mathbf{z} \\Big]$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here is an example with an arbitrary mean and covariance in 2 dimensions:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.colorbar.Colorbar at 0x13607c2e8>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy.linalg import cho_factor, cho_solve\n",
    "d =2\n",
    "mean = np.array([1, 2])[:, None]\n",
    "cov = np.array([[2, 1], [1, 4]])\n",
    "L = cho_factor(cov, lower=True)\n",
    "diagL = np.diag(L[0])\n",
    "detcov = np.prod(diagL) ** 2  #Sigma = LL^T ; Determinant of prod =  prod. of determinant.\n",
    "Z = 1./np.sqrt(((2*np.pi)**2)*detcov)  #normalizing constant \n",
    "\n",
    "#define a grid over x \n",
    "x1 = np.linspace(-5, 10, 50)\n",
    "X1, X2 = np.meshgrid(x1, x1)\n",
    "Xgrid = np.hstack([X1.flatten()[:, None], X2.flatten()[:, None]])[:, :, None]\n",
    "Pdfs = np.array([Z*np.exp(-0.5*np.dot((xp-mean).T, cho_solve(L, xp-mean))) for xp in Xgrid])  ## See note below\n",
    "\n",
    "## For those new to Python, the above line uses the concept of list comprehensions in Python. \n",
    "## See here: http://www.secnetix.de/olli/Python/list_comprehensions.hawk\n",
    "## This is extremely useful for looping over simple expressions. \n",
    "## See also the map function: http://book.pythontips.com/en/latest/map_filter.html\n",
    "\n",
    "#visualize the density\n",
    "plt.contourf(X1, X2, Pdfs.reshape((50, 50)), 100, cmap = 'magma')\n",
    "plt.colorbar()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Define a function ```mvnpdf``` which accepts an input $\\mathbf{x}$ of any arbitrary dimension, $d$, and also accepts a mean vector and covariance matrix and returns the density of the normal distribution with given mean and covariance at point $\\mathbf{x}$. Feel free to re-use any/all code from the example given above."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "## write code here."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Note: You can assume that the density is non-degenerate, i.e., the covariance matrix is positive definite.**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's test your implementation. Use ```numpy.random.randn``` and ```sklearn.datasets.make_spd_matrix```  to generate random mean vector and covariance matrix, $\\mu$ and $\\Sigma$ for a random variable in $2$ dimensions. Visualize the contours of the density function. Use ```scipy.stats.multivariate_normal``` to verify that you get the correct result. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# write code here."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Sampling from a multivariate Gaussian"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Recall that a univariate random variable, $\\mathbf{q} \\sim \\mathcal{N}({\\mathbf{q}|\\mu, \\sigma^2})$, can be expressed as $\\mathbf{q} = \\mu + \\sigma \\mathbf{z}$, where, $\\mathbf{z} \\sim \\mathcal{N}({\\mathbf{z}|0, 1})$ is a standard normal random variable. This suggests an easy approach for sampling from a univariate distribution with arbitrary mean and variance - Sample from the standard normal distribution $\\mathcal{N}(0, 1)$, scale the result by standard deviation $\\sigma$ and then translate by $\\mu$.\n",
    "\n",
    "The approach to sampling from a multivariate Gaussian is analogous to the univariate case. Here are the steps:\n",
    "1. Compute  the Cholesky decomposition of the covariance matrix $\\Sigma$ i.e. find $\\mathbf{L}$ such that $\\Sigma = \\mathbf{L} \\mathbf{L}^T$.\n",
    "2. Sample a vector $\\mathbf{z}$ from the multivariate standard normal in the given dimensions, i.e., $\\mathcal{N}(\\mathbf{0}_{d}, ,\\mathbf{I}_{d\\times d})$.\n",
    "3. Scale and shift: $\\mathbf{x} = \\mu + \\mathbf{L}\\mathbf{z}$.\n",
    "\n",
    "The code below samples from the MVN defined in the previous section of this question."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x136383cc0>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "nsamples = 1000\n",
    "samples = np.array([mean+np.dot(np.tril(L[0]), np.random.randn(2, 1)) for i in range(nsamples)])[:, :, 0]\n",
    "x1 = samples[:,0]\n",
    "x2 = samples[:,1]\n",
    "\n",
    "#plot samples and compare to the pdf\n",
    "plt.contourf(X1, X2, Pdfs.reshape((50, 50)), 100, cmap = 'magma')\n",
    "plt.colorbar()\n",
    "plt.scatter(x1, x2, marker='x')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note that the generated samples look like they have been drawn from the MVN defined earlier. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Define a function ```mvnsamples``` which accepts as input the mean vector and covariance matrix of a multivariate distribution of any arbitrary dimension, $d$, and returns $n$ samples from the distribution. $n$ is also to be passed as a parameter to the function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# type code here."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's test your implementation. For the same mean and covariance generated earlier, draw $n$ samples and visualize it with a scatter plot. Make sure to compare the scatter plot with the density contours to verify your sampler is implemented correctly. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# type code here."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Problem 4 - Linear regression on noisy dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Consider the following dataset:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1364852e8>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data =  np.loadtxt('hw3_data1.txt')\n",
    "X = data[0, :]\n",
    "Y = data[1, :]\n",
    "plt.figure(figsize=(12, 8))\n",
    "plt.plot(X, Y, 'ro', label = 'Data')\n",
    "plt.xlabel('$x$', fontsize=14)\n",
    "plt.ylabel('$y$', fontsize=14)\n",
    "plt.legend(loc='best', fontsize = 14)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We will try to fit the following linear regression model for this dataset: \n",
    "$$\n",
    "f(x;\\mathbf{w}) = w_0 + w_1 x,\n",
    "$$\n",
    "where, $w_0$ and $w_1$ are model  parameters. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Part A"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Bayesian linear regression (Part 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Consider the additive noise model:\n",
    "$$\n",
    "y = f(x;\\mathbf{w}) + \\epsilon = w_0 + w_1 x + \\epsilon,\n",
    "$$\n",
    "where, $\\epsilon \\sim \\mathcal{N}(\\epsilon|0, \\sigma^2)$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Consider the following isotropic prior on the weights:\n",
    "$$\n",
    "p(\\mathbf{w}) = \\mathcal{N}(\\mathbf{w}|0, \\alpha^{-1}\\mathbf{I}).\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The density function of multivariate Gaussians can be found [here](https://en.wikipedia.org/wiki/Multivariate_normal_distribution). We will take a look at how to efficiently compute the density of multivariate Gaussians later in the course but for the time being let's use [scipy's implementation](https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.stats.multivariate_normal.html) of the same to visualize the prior. \n",
    "\n",
    "Generate a grid of $w_0$ and $w_1$ values and use scipy's ```multivariate_normal.pdf``` method to compute the prior probability density at each location of the grid. Note that the prior mean and covariance are shown in the expression above. Show the contour plot of the prior pdf. If you aren't already familiar, check out [this tutorial](https://jakevdp.github.io/PythonDataScienceHandbook/04.04-density-and-contour-plots.html) on matplotlib contour plots.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# write your code here"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Generate some samples of $\\mathbf{w}$ from the prior and visualize the corresponding. You can use ```numpy.multivariate_normal```. An example using arbitrary mean and covariance  is shown below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "mean = np.array([1, 2])\n",
    "cov = np.array([[2, 0], [0, 2]])\n",
    "w_sample = np.random.multivariate_normal(mean = mean, cov = cov, size = 1)\n",
    "w_0 = w_sample[0, 0]\n",
    "w_1 = w_sample[0, 1]\n",
    "x = np.linspace(-2, 2, 100)\n",
    "\n",
    "plt.plot(x, w_0 + w_1*x, label='$f(\\mathbf{x};\\mathbf{w}) = w_0 + w_1 x$')\n",
    "plt.xlabel('$x$')\n",
    "plt.ylabel('$f(x;\\mathbf{w})$')\n",
    "plt.legend(loc='best', fontsize=14)\n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Note**: Please make sure all samples of $f$ are shown in the same plot. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# nsamples = 5 (whatever number you want) \n",
    "#\n",
    "# Sample and visualize\n",
    "#"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Define a function that accepts the prior precision $\\alpha$ and the noise variance $\\sigma^2$ and returns the posterior mean and covariance of $w$. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def postmeanvar(a, sigma2):\n",
    "    \"\"\"\n",
    "    write code here to return posterior mean and covariance of w.\n",
    "    \"\"\"\n",
    "    return"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Visualize the posterior distribution over $w$ using scipy's ```multivariate_normal.pdf``` function. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "#\n",
    "# Visualize the posterior\n",
    "#"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**How is the posterior different from the prior?**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*Enter your model description/solution here. Delete that ``<br>`` line (it just makes some white space).*\n",
    "<br><br><br><br><br><br><br><br><br><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Plot some samples from the posterior distribution:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "#\n",
    "#  Code to plot some samples from posterior \n",
    "#"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Visualize the mean and variance of the posterior predictive distribution. Make sure to distinguish between \n",
    "measurement noise and epistemic uncertainty."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "#\n",
    "# Visualize posterior predictive distribution.\n",
    "#"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It is a good idea to set aside a part of your dataset for the purpose of testing the accuracy of your trained model. \n",
    "Consider the following test dataset:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "testdata = np.loadtxt('hw3_data1_test.txt')\n",
    "Xtest = testdata[0, :]\n",
    "Ytest = testdata[1, :]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Make predictions on the test inputs, ```Xtest```, using the posterior predictive distribution under the Bayesian model. Compare it to the least squares predictions. Recall that the  least squares estimate of $\\mathbf{w}$ is given by:\n",
    "$$\n",
    "\\mathbf{w}_{\\mathrm{LS}} = (\\mathbf{\\Phi}^T \\mathbf{\\Phi})^{-1} \\mathbf{\\Phi}^T y_{1:N}. \n",
    "$$\n",
    "Use ```numpy.lstsq``` to obtain $\\mathbf{w}_{\\mathrm{LS}}$. The prediction at a new test location $x^*$ is given by $y^* = \\mathbf{w}_{\\mathrm{LS}, 0} + \\mathbf{w}_{\\mathrm{LS}, 1}x^*$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "#\n",
    "#  Ypred_ls =  #least squares prediction.\n",
    "#  Ypred_bayes =  #bayesian model prediction. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Which model (Bayesian or least squares) offers better predictions? Why do you think that is?**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*Enter your model description/solution here. Delete that ``<br>`` line (it just makes some white space).*\n",
    "<br><br><br><br><br><br><br><br><br><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**In what situations (if any) would you expect simple least squares regression to perform better than the Bayesian regression?**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*Enter your model description/solution here. Delete that ``<br>`` line (it just makes some white space).*\n",
    "<br><br><br><br><br><br><br><br><br><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Part B"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Evidence approximation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Picking the hyperparameters $\\alpha$ and $\\sigma^2$ is tricky. In theory, the fully approach to modeling the uncertainty in the hyperparameters is  simple - put  priors on them and make predictions on test data by marginalizing wrt to the hyperparameters and model weights. In practice, the resulting integrals are intractable. A popular and easy to implement approach to hyperparameter selection is [cross validation](https://en.wikipedia.org/wiki/Cross-validation_(statistics)). The idea is to choose a set of hyperparameter values, train the model at each value in the set and test it predictive accuracy. Finally, you select the values of the hyperparameters that offer the best predictive capacity.\n",
    "\n",
    "A more systematic approach is to maximize the model evidence. The evidence is the marginal likelihood  of the data conditional on the hyperparameters, i.e., $p(y|x, \\alpha, \\sigma^2)$. \n",
    "Under the Gaussian likelihood and isotropic Gaussian prior model, the log evidence is given by:\n",
    "$$\n",
    "log p(y|x, \\alpha, \\beta) = \\frac{M}{2} \\log \\alpha + \\frac{N}{2} \\log \\beta - E(\\mathbf{m}) -\\frac{1}{2} \\log \\mathrm{det}(A) - \\frac{N}{2} \\log 2\\pi,\n",
    "$$\n",
    "where, \n",
    "$\\beta$ is the inverse noise variance (or precision), \n",
    "\n",
    "$$A = \\alpha \\mathbf{I} + \\beta \\Phi^T \\Phi,$$ $$\\mathbf{m} = \\beta A^{-1} \\Phi^T y_{1:N},$$\n",
    "\n",
    "and $M$ is the number of model parameters, which in this case is 2. \n",
    "\n",
    "The term $E(\\mathbf{m})$ is a regularized misfit term given by:\n",
    "$$\n",
    "E(\\mathbf{m}) = \\frac{\\beta}{2} \\| y_{1:N} - \\Phi \\mathbf{m} \\|_{2}^{2} + \\frac{\\alpha}{2} \\| \\mathbf{m} \\|_{2}^{2}.\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set up a function ```evidence``` that accepts the prior precision, $\\alpha$ and the inverse noise variance, $\\beta$, and returns the value of the evidence function. Feel free to parameterize your implementation of the ```evidence``` in whatever way you see fit."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "def evidence():\n",
    "    \"\"\"\n",
    "    Set this up.\n",
    "    \"\"\"\n",
    "    return"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Use a suitable second order unconstrained optimization routine from ```scipy.optimize``` to minimize the **negative log evidence**. A popular method is the [BFGS algorithm.](https://docs.scipy.org/doc/scipy/reference/optimize.minimize-bfgs.html). Be sure to read the documentation carefully."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "#\n",
    "# Set up the optimization routine and minimize the negative log evidence. \n",
    "#"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Use the estimates of the hyperparameters obtained by maximizing the evidence to recompute the posterior mean and variance of the model parameters under the constant prior precision and likelihood variance model. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "#\n",
    "# compute posterior mean and variance. \n",
    "#"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Does this differ from your earlier estimate of the posterior mean and variance?**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*Enter your model description/solution here. Delete that ``<br>`` line (it just makes some white space).*\n",
    "<br><br><br><br><br><br><br><br><br><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Visualize the following:** \n",
    "1.  The posterior density of $\\mathbf{w}$.\n",
    "2.  A few models sampled from the posterior. \n",
    "3.  The posterior predictive distribution  with noise variance and epistemic uncertainty."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "#\n",
    "#  Visualizations.\n",
    "#"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, use the model you just trained to make predictions on the  test data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "#\n",
    "# Ypred_ev =\n",
    "#"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**How do the predictions compare to the previous versions?**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*Enter your model description/solution here. Delete that ``<br>`` line (it just makes some white space).*\n",
    "<br><br><br><br><br><br><br><br><br><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Problem 5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Bayesian linear regression  (Part 2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We will now look at a somewhat more complicated example. The following dataset was generated using a molecular dynamics simulation of a plastic material (thanks to [Professor Alejandro Strachan](https://engineering.purdue.edu/MSE/people/ptProfile?id=33239) for sharing the data!).\n",
    "In particular, we took a rectangular chunk of the material and we started applying tensile forces along one dimension.\n",
    "What you see in the data set below is the instantaneous measurements of *strain* (percent enlogation of the material in the pulling direction) vs the normal *stress* (force per square area in MPa = $10^6 \\text{N}/m^2$).\n",
    "This [video](https://youtu.be/K6vOkQ5F9r0) will help you understand how the dataset was generated."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Stress $\\\\sigma$')"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = np.loadtxt('stress_strain.txt')\n",
    "epsilon = data[:, 0]\n",
    "sigma = data[:, 1]\n",
    "fig, ax = plt.subplots(figsize = (10, 6))\n",
    "ax.plot(epsilon, sigma, '.')\n",
    "ax.set_xlabel('Strain $\\epsilon$', fontsize = 14)\n",
    "ax.set_ylabel('Stress $\\sigma$', fontsize = 14)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is a noisy dataset.\n",
    "We would like to process it in order to extract what is known as the [stress-strain curve](https://en.wikipedia.org/wiki/Stress–strain_curve) of the material.\n",
    "The stress-strain curve characterizes the type of the material (the chemical bonds, the crystaline structure, any defects, etc.).\n",
    "It is a required input to the equations of [elasticity](https://en.wikipedia.org/wiki/Elasticity_(physics)) otherwise known as a *constitutive relation*.\n",
    "\n",
    "### Part A\n",
    "The very first part of the stress-strain curve is very close to being linear.\n",
    "It is called the *elastic regime*.\n",
    "In that region, say $\\epsilon < \\epsilon_l=0.04$, the relationship between stress and strain is:\n",
    "$$\n",
    "\\sigma(\\epsilon) = E\\epsilon.\n",
    "$$\n",
    "The constant $E$ is known as the *Young modulus* of the material.\n",
    "Use a generalized linear model and Bayesian linear regression to:\n",
    "+ Compute the posterior of $E$ given the data;\n",
    "+ Visualize your epistemic and aleatory uncertainty about the stress-strain curve in the elastic regime;\n",
    "+ Take five plaussible samples of the linear stress-strain curve and visualize them.\n",
    "\n",
    "In your answer, you should first clearly describe your model in text using the notation of the lectures and then code the solution."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "# enter code here."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Part B\n",
    "Now, come up with a generalized linear model that can capture the non-linear part of the stress-strain relation.\n",
    "Remember, you can use any model you want as soon as:\n",
    "+ it is linear in the parameters to be estimated,\n",
    "+ it clearly has a well-defined elastic regime (see Part A).\n",
    "\n",
    "Use your model to:\n",
    "+ Derive, compute, and visualize a probabilistic estimate of the peak of the stress-strain curve (the so-called *yield stress*). This is not necessarily going to be Gaussian or even analytically available;\n",
    "+ Visualize your epistemic and aleatory uncertainty about the stress-strain curve.\n",
    "+ Take five plaussible samples of the linear stress-strain curve and visualize them.\n",
    "\n",
    "In your answer, you should first clearly describe your model in text using the notation of the lectures and then code the solution.\n",
    "\n",
    "*Hint: You can use the Heavide step function to turn on or off models for various ranges of $\\epsilon$. The idea is quite simple. Here is a model that has the right form in the elastic regime and an arbitrary form in the non-linear regime:*\n",
    "$$\n",
    "f(\\epsilon) = E\\epsilon \\left[(1 - H(\\epsilon - \\epsilon_l)\\right] + g(\\epsilon;\\mathbf{w}_g)H(\\epsilon - \\epsilon_l),\n",
    "$$\n",
    "where\n",
    "$$\n",
    "H(x) = \\begin{cases}\n",
    "0,\\;\\text{if}\\;x < 0\\\\\n",
    "1,\\;\\text{otherwise}.\n",
    "\\end{cases}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*Enter your model description/solution here. Delete that ``<br>`` line (it just makes some white space).*\n",
    "<br><br><br><br><br><br><br><br><br><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Part C\n",
    "\n",
    "The model you constructed in part B may have a disctontinuity at $\\epsilon=\\epsilon_l$.\n",
    "How can you enforce continuity of $\\sigma(\\epsilon)$ and its first derivative at that point?\n",
    "Can you reparameterize the model of part B, so that this condition is automatically satisfied?\n",
    "If yes, then repeat the analysis of part B."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*Enter your model description/solution here. Delete that ``<br>`` line (it just makes some white space).*\n",
    "<br><br><br><br><br><br><br><br><br><br>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Enter your code here"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "-End-"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  },
  "latex_envs": {
   "bibliofile": "biblio.bib",
   "cite_by": "apalike",
   "current_citInitial": 1,
   "eqLabelWithNumbers": true,
   "eqNumInitial": 0
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
